package cn.yto.print.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WeightUtil {

    /**
     * 华耀电子秤数据格式解析
     * 重量数据均为最低位在前，高位和符号位在最后。负数符号位发送为“-”，正数时符号位发送为 0
     * 例如：当前仪表显示的重量为 -500.00kg，则串行输出数据为：= 00.005-
     * 当前仪表显示的重量为 500.00kg，则串行输出数据为：= 00.0050
     */
    public static double parseWeightData(String weightData) {
        // 匹配=44.400- 或者=44.4000格式数据
        String regex = "=(\\-?\\d{2}\\.\\d{3}[-0])";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(weightData);
        String lastWeight = null;
        // 匹配最后一组数据
        while (matcher.find()) {
            lastWeight = matcher.group(1);
        }
        // 如果没有找到符合要求的子字符串，则抛出异常
        if (lastWeight == null) {
            throw new IllegalArgumentException("Invalid weight data：" + weightData);
        }
        // 高低位反转
        String reversedWeightData = new StringBuilder(lastWeight).reverse().toString();
        double weight = Double.parseDouble(reversedWeightData);
        // 如果符号位为 -，则将重量取负数
        if (lastWeight.endsWith("-")) {
            weight = -weight;
        }
        return weight;
    }

}
